package com.project.gcsj5.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.project.gcsj5.model.Book;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 书籍数据访问接口
 * 提供对book表的基础CRUD及自定义操作
 * 继承MyBatis-Plus的BaseMapper获得基础数据库操作方法
 */
@Mapper // 标识为MyBatis的Mapper接口
public interface BookMapper extends BaseMapper<Book> {

    /**
     * 根据书名模糊查询书籍
     * @param name 要搜索的书名关键字
     * @return 匹配的书籍列表
     * @注意 使用${}有SQL注入风险，建议改用CONCAT函数或MyBatis-Plus的LambdaQueryWrapper
     */
    @Select("SELECT * FROM book WHERE name LIKE '%${name}%'")
    List<Book> find_by_content(String name);

    /**
     * 增加书籍的浏览次数
     * @param id 书籍ID
     * @return 更新是否成功
     */
    @Update("UPDATE book SET view_sum = view_sum + 1 WHERE id = #{id}")
    Boolean add_view(int id);

    /**
     * 更新书籍评分（加权平均算法）
     * 新评分 = 原评分*0.8 + 新评分*0.2
     * @param rate 新评分值
     * @param id 书籍ID
     * @return 更新是否成功
     */
    @Update("UPDATE book SET stars = (stars * 0.8) + (#{rate} * 0.2) WHERE id = #{id}")
    Boolean stars_new(float rate, int id);

    /**
     * 根据ID获取单个书籍详情
     * @param id 书籍ID
     * @return 书籍对象
     */
    @Select("SELECT * FROM book WHERE id = #{id}")
    Book get_a_book(int id);

    /**
     * 根据分类查询书籍
     * @param category 书籍分类
     * @return 该分类下的书籍列表
     */
    @Select("SELECT * FROM book WHERE category = #{category}")
    List<Book> find_by_category(String category);
}